package com.sap.sap_mangers.service;

import java.util.List;
import java.util.Map;

/**
 * @author 樊东升
 * @date 2022/8/12 11:58
 */
public interface CacheService {

    /**
     * 更新真实姓名
     *
     * @param username 学号
     * @param cache    真实姓名缓存
     * @return 通过学号查询的真实姓名
     */
    String getRealNameCache(Map<String, String> cache, String username);

    /**
     * 获取真实姓名缓存
     *
     * @return 真实姓名
     */
    Map<String, String> getRealNameCacheMap();

    /**
     * 获取头像URL(如果为空会更新)
     *
     * @param username 学号
     * @param cache    头像URL缓存
     * @return 通过学号查询头像的URL
     */
    String getHeaderCache(Map<String, String> cache, String username);

    /**
     * 更新头像URL
     *
     * @param cache    头像缓存
     * @param username 学号
     * @return 头像URL
     */
    String updateUserHeaderUrl(Map<String, String> cache, String username);

    /**
     * 获取头像缓存
     *
     * @return 头像URL缓存
     */
    Map<String, String> getHeaderCacheMap();

    /**
     * 获取用户信息缓存
     *
     * @return 用户信息缓存
     */
    Map<String, String> getUser();

    /**
     * 更新用户信息
     *
     * @param username 学号
     */
    void updateUser(String username);

    /**
     * 获取活动图片组缓存
     *
     * @param uuid 图片组id
     * @return 获取活动图片组缓存
     */
    List<String> getActivityImage(String uuid);

    /**
     * 更新缓存中的图片地址
     *
     * @param newId  新图片组id
     * @param oldId  旧图片组id
     * @param images 图片组
     */
    void updateActivityImage(List<String> images, String oldId, String newId);

    /*邮箱缓存*/

    /**
     * 缓存该用户的验证码
     *
     * @param code     验证码
     * @param username 用户名
     */
    void setPasswordCode(String code, String username);

    /**
     * 获取该用户的验证码
     *
     * @return String
     */
    String getPasswordCode(String username);


    /**
     * 修改 '是否开启入会升级接口' 标识
     * "0": 关闭；"1"：开启 (redis中value没有bool,所以使用的字符串)
     */
    void updateSapIfOpenJoinFunction();

    /**
     * 获取当前 '是否开启入会升级接口' 标识的值
     *
     * @return false：关闭；true：开启 (分别对应从redis取到的"0"和"1")
     */
    boolean getSapIfOpenJoinFunction();

    /**
     * 直接关闭入会升级功能(申请入会相关接口)
     * <p>
     * (将 '是否开启入会升级接口'标识 改为 "0")
     */
    void closeSapIfOpenJoinFunction();

    /**
     * 登录的时候缓存用户信息到redis(升级会员的时候更新权限也会用到)
     * @param userName 学号
     * @param userJson 用户信息(json格式)
     */
    void loginCacheUserToRedis(String userName, String userJson);

    /**
     * 删除学号在redis里的缓存(用来修改密码的时候使用)
     * @param username 学号
     */
   void deleteCacheUserToRedis(String username);
}
